package com.study.kt._01grammar._01basic

/**
 * 在Kotlin中 函数与对象都处于同一地位
 */
fun main() {
    println(sum3(1, 2))

    //定义函数表达式，类似于C中函数指针
    //接收两个Int类型的参数，返回Int a,b为参数->函数体
    val add: (Int, Int) -> Int = { a, b -> a + b }
    println(add(2, 3))

    // calc参数直接使用::引用sum
    val res1 = testSum(1, 2, ::sum)
    val res2 = testSum(1, 2) { x, y ->
        // 此处return可以省略，如果添加则需要指定return到什么位置，否则默认return到main函数
        return@testSum x - y
    }
    println("res1=$res1,res2=$res2")
}

fun testSum(a: Int, b: Int, calc: (x: Int, y: Int) -> Int): Int {
    return calc(a, b)
}

fun sum(a: Int, b: Int): Int {
    return a + b
}

//以上函数体仅仅有一行，可以用简写，省略大括号与return
fun sum2(a: Int, b: Int): Int = a + b

//函数的返回值也可以通过类型推断，也可以省略
fun sum3(a: Int, b: Int) = a + b